「自然语言处理(NLP)」一文带你了解TF-IDF
喜欢我们,点击上方AINLPer,关注一下,极品干货即刻送达!
引言
今天看了一下网上关于TF-IDF的文章,但是相关文章的知识点比较分散,所以作者对这些分散的知识进行了梳理整合,希望本文能够让你很快了解TF-IDF到底是什么,为什么会存在,以及其优缺点?
最后,还是帮作者点个在看吧,谢谢~~
正文开始
1First Blood
1、从向量化特征缺失说起
在将文本分词并向量化后,我们可以得到词汇表中每个词在各个文本中形成的词向量,我们将下面4个短文本做了词频统计:
corpus=["I come to China to travel",
"This is a car polupar in China",
"I love tea and Apple ",
"The work is to write some papers in science"]
不考虑停用词,处理后得到的词向量如下:
[[0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 1 0 0]
[0 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0]
[1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 1 0 1 1]]
如果我们直接将统计词频后的19维特征做为文本分类的输入,会发现有一些问题。比如第一个文本,我们发现"come","China"和“Travel”各出现1次,而“to“出现了两次。似乎看起来这个文本与”to“这个特征更关系紧密。但是实际上”to“是一个非常普遍的词,几乎所有的文本都会用到,因此虽然它的词频为2,但是重要性却比词频为1的"China"和“Travel”要低的多。如果我们的向量化特征仅仅用词频表示就无法反应这一点。因此我们需要进一步的预处理来反应文本的这个特征,而这个预处理就是TF-IDF.
2、什么是TF-IDF? TF-IDF是Term Frequency - Inverse Document Frequency的缩写,即“词频-逆文本频率”。它由两部分组成,TF和IDF。前面的TF也就是我们前面说到的词频,我们之前做的向量化也就是做了文本中各个词的出现频率统计,并作为文本特征,这个很好理解。关键是后面的这个IDF,即“逆文本频率”如何理解。在上一节中,我们讲到几乎所有文本都会出现的"to"其词频虽然高,但是重要性却应该比词频低的"China"和“Travel”要低。我们的IDF就是来帮助我们来反应这个词的重要性的,进而修正仅仅用词频表示的词特征值。 概括来讲, IDF反应了一个词在所有文本中出现的频率,如果一个词在很多的文本中出现,那么它的IDF值应该低,比如上文中的“to”。而反过来如果一个词在比较少的文本中出现,那么它的IDF值应该高。比如一些专业的名词如“Machine Learning”。这样的词IDF值应该高。一个极端的情况,如果一个词在所有的文本中都出现,那么它的IDF值应该为0。 上面是从定性上说明的IDF的作用,那么如何对一个词的IDF进行定量分析呢?这里直接给出一个词x的IDF的基本公式如下:3、举例说明TF-IDF计算方式
比如有这么一个简单语料库:
corpus = [["我","a","e"],["我","a","c"],["我","a","b"]]
计算文本频率:统计的语料中词语出现的次数与所有词语的总数的比值,比如在上述例子中,一共有五个词(我,a,b,c,e),所有词汇总数是5,其中“c”这个字出现了1次,所以“我”的文本频率是1/5,其他依次类推。
计算逆文档词频:逆文档频率就是所有文档的条数与有某词的文档条数的比值的对数,比如上述例子中,文档总数是3条,出现“c”的是第二条,总共一条,所以“c”的逆文档频率指数就是log(3+1/1+1),在实际操作中,我们会加平滑因子,防止统计数为0这种情况出现。
文本频率和逆文档频率(TF-IDF)指数就是把这两个结果相乘,就是这个词的权重,比如"c"的TFIDF值就是1/5 * log(3+1/1+1)
对于以上这个语语料库:对每个词都做一下这样的计算,最后得到的是一个样品数量 * 唯一token总数维度的矩阵,在例子中样本数量为3,唯一token总数为5,那么我们会得到一个3*5的矩阵,如果这一条文档中没有这个词就直接赋值0就可以了。最终该矩阵为:
统计个数:
{'我': 3, 'a': 3, 'e': 1, 'c': 1, 'b': 1}
token编号:
{'我': 0, 'a': 1, 'e': 2, 'c': 3, 'b': 4}
TFIDF矩阵
[[0.6 0.6 0.41972246 0. 0. ]
[0.6 0.6 0. 0.41972246 0. ]
[0.6 0.6 0. 0. 0.41972246]]
4、TF-IDF算法的不足
TF-IDF 采用文本逆频率 IDF 对 TF 值加权取权值大的作为关键词,但 IDF 的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以 TF-IDF 算法的精度并不是很高,尤其是当文本集已经分类的情况下。 在本质上 IDF 是一种试图抑制噪音的加权,并且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用。这对于大部分文本信息,并不是完全正确的。IDF 的简单结构并不能使提取的关键词, 十分有效地反映单词的重要程度和特征词的分布情 况,使其无法很好地完成对权值调整的功能。尤其是在同类语料库中,这一方法有很大弊端,往往一些同类文本的关键词被盖。 TF-IDF算法实现简单快速,但是仍有许多不足之处:(1)没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。
(2)按照传统TF-IDF,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。
(3)传统TF-IDF中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。
(4)对于文档中出现次数较少的重要人名、地名信息提取效果不佳。
参考文献
[1]https://blog.csdn.net/asialee_bird/article/details/81486700#5%E3%80%81Sklearn%E5%AE%9E%E7%8E%B0TF-IDF%E7%AE%97%E6%B3%95
[2]https://www.cntofu.com/book/85/nlp/tf-idf.md
[3]https://blog.csdn.net/jiangzhenkang/article/details/86749717
(含源码!)「自然语言处理(NLP)」社交媒体舆论防控(RP-DNN) 内含源码!「自然语言处理(NLP)」广告点击量率预测
长按识别下方二维码,关注我们吧(づ ̄3 ̄)❤~
资料整理实属不易,点个【在看】再走吧~~